package com.cloudOffice.result;

import com.cloudOffice.enumeration.ResultCodeEnum;
import lombok.AllArgsConstructor;
import lombok.Data;

/**
 * @program: cloud-office
 * @className: result
 * @description: 统一返回结果
 * @data: 2024/2/4 15:55
 * @author: ihu
 * @version: 1.0
 **/

@Data
@AllArgsConstructor
public class Result<T> {
	
	//返回码
	private Integer code;
	
	//返回消息
	private String message;
	
	//返回数据
	private T data;
	
	public Result() {}
	
	// 返回数据
	protected static <T> Result<T> build(T data) {
		Result<T> result = new Result<>();
		if (data != null) {
			result.setData(data);
		}
		return result;
	}

//	public static <T> Result<T> build(T body, Integer code, String message) {
//		Result<T> result = build(body);
//		result.setCode(code);
//		result.setMessage(message);
//		return result;
//	}
	
	public static <T> Result<T> build(T body, ResultCodeEnum resultCodeEnum) {
		Result<T> result = build(body);
		result.setCode(resultCodeEnum.getCode());
		result.setMessage(resultCodeEnum.getMessage());
		return result;
	}
	
	public static <T> Result<T> success() {
		return Result.success(null);
	}
	
	/**
	 * 操作成功
	 */
	public static <T> Result<T> success(T data) {
		build(data);
		return build(data, ResultCodeEnum.SUCCESS);
	}
	
	public static <T> Result<T> fail() {
		return Result.fail(null);
	}
	
	/**
	 * 操作失败
	 */
	public static <T> Result<T> fail(T data) {
		build(data);
		return build(data, ResultCodeEnum.FAIL);
	}
	
	public Result<T> message(String msg) {
		this.setMessage(msg);
		return this;
	}
	
	public Result<T> code(Integer code) {
		this.setCode(code);
		return this;
	}
	
}